package com.xyd.auth.utils;

import com.xyd.model.system.SysMenu;

import java.util.ArrayList;
import java.util.List;


public class MenuHelper {

    /**
     * 构建树状数据
     * @param sysMenuList 所有的目录
     * @return 最终的树状目录
     */
    public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {
        ArrayList<SysMenu> sysMenus = new ArrayList<>();
        for (SysMenu sysMenu : sysMenuList) {
            if (sysMenu.getParentId() == 0) { // 如果上级ParentId == 0 说明是顶级目录
                // 在当成树状数据根目录前先通过getChildren以递归形式添加其子目录以及子目录下的所有目录递归
                sysMenus.add(getChildren(sysMenu,sysMenuList));
            }
        }
        return sysMenus;
    }


    /**
     * 用户获取给定菜单的子目录
     * @param sysMenu 给定菜单
     * @param sysMenuList 所有的菜单
     * @return 添加了子菜单的菜单
     */
    public static SysMenu getChildren(SysMenu sysMenu, List<SysMenu> sysMenuList ) {
        // 初始化sysMenu的children
        sysMenu.setChildren(new ArrayList<SysMenu>());
        // 添加子目录/菜单/按钮
        for (SysMenu sysMenu1 : sysMenuList) {
            // 给定的目录id 与 所有的目录的父级目录比较 如果相等则说明当前遍历的对象为给定目录的子目录
            if(sysMenu.getId().longValue() == sysMenu1.getParentId().longValue()){
                sysMenu.getChildren().add(getChildren(sysMenu1,sysMenuList));
            }
        }
        return sysMenu;
    }
}
